<?xml version="1.0" encoding="ascii"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
          "DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <title>Dingo.pubsub.PublisherClass</title>
  <link rel="stylesheet" href="epydoc.css" type="text/css" />
  <script type="text/javascript" src="epydoc.js"></script>
</head>

<body bgcolor="white" text="black" link="blue" vlink="#204080"
      alink="#204080">
<!-- ==================== NAVIGATION BAR ==================== -->
<table class="navbar" border="0" width="100%" cellpadding="0"
       bgcolor="#a0c0ff" cellspacing="0">
  <tr valign="middle">
  <!-- Home link -->
      <th>&nbsp;&nbsp;&nbsp;<a
        href="Dingo-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>

  <!-- Tree link -->
      <th>&nbsp;&nbsp;&nbsp;<a
        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>

  <!-- Index link -->
      <th>&nbsp;&nbsp;&nbsp;<a
        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>

  <!-- Help link -->
      <th>&nbsp;&nbsp;&nbsp;<a
        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>

  <!-- Project homepage -->
      <th class="navbar" align="right" width="100%">
        <table border="0" cellpadding="0" cellspacing="0">
          <tr><th class="navbar" align="center"
            ><a class="navbar" target="_top" href="http://code.google.com/p/dingo-wsn/">Dingo</a></th>
          </tr></table></th>
  </tr>
</table>
<table width="100%" cellpadding="0" cellspacing="0">
  <tr valign="top">
    <td width="100%">
      <span class="breadcrumbs">
        <a href="Dingo-module.html">Package&nbsp;Dingo</a> ::
        <a href="Dingo.pubsub-module.html">Module&nbsp;pubsub</a> ::
        Class&nbsp;PublisherClass
      </span>
    </td>
    <td>
      <table cellpadding="0" cellspacing="0">
        <!-- hide/show private -->
        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
        <tr><td align="right"><span class="options"
            >[<a href="frames.html" target="_top">frames</a
            >]&nbsp;|&nbsp;<a href="Dingo.pubsub.PublisherClass-class.html"
            target="_top">no&nbsp;frames</a>]</span></td></tr>
      </table>
    </td>
  </tr>
</table>
<!-- ==================== CLASS DESCRIPTION ==================== -->
<h1 class="epydoc">Class PublisherClass</h1><br /><br />
<pre class="literalblock">

The publish/subscribe manager.  It keeps track of which listeners
are interested in which topics (see subscribe()), and sends a
Message for a given topic to listeners that have subscribed to
that topic, with optional user data (see sendMessage()).

The three important concepts for Publisher are:
    
- listener: a function, bound method or
  callable object that can be called with one parameter
  (not counting 'self' in the case of methods). The parameter
  will be a reference to a Message object. E.g., these listeners
  are ok::
      
      class Foo:
          def __call__(self, a, b=1): pass # can be called with only one arg
          def meth(self,  a):         pass # takes only one arg
          def meth2(self, a=2, b=''): pass # can be called with one arg
    
      def func(a, b=''): pass
      
      Foo foo
      Publisher().subscribe(foo)           # functor
      Publisher().subscribe(foo.meth)      # bound method
      Publisher().subscribe(foo.meth2)     # bound method
      Publisher().subscribe(func)          # function
      
  The three types of callables all have arguments that allow a call 
  with only one argument. In every case, the parameter 'a' will contain
  the message. 

- topic: a single word, a tuple of words, or a string containing a
  set of words separated by dots, for example: 'sports.baseball'.
  A tuple or a dotted notation string denotes a hierarchy of
  topics from most general to least. For example, a listener of
  this topic::

      ('sports','baseball')

  would receive messages for these topics::

      ('sports', 'baseball')                 # because same
      ('sports', 'baseball', 'highscores')   # because more specific

  but not these::

       'sports'      # because more general
      ('sports',)    # because more general
      () or ('')     # because only for those listening to 'all' topics
      ('news')       # because different topic
      
- message: this is an instance of Message, containing the topic for 
  which the message was sent, and any data the sender specified. 
  
:note: This class is visible to importers of pubsub only as a
       Singleton. I.e., every time you execute 'Publisher()', it's
       actually the same instance of PublisherClass that is
       returned. So to use, just do'Publisher().method()'.
    

</pre><br /><br />

<!-- ==================== INSTANCE METHODS ==================== -->
<a name="section-InstanceMethods"></a>
<table class="summary" border="1" cellpadding="3"
       cellspacing="0" width="100%" bgcolor="white">
<tr bgcolor="#70b0f0" class="table-header">
  <td colspan="2" class="table-header">
    <table border="0" cellpadding="0" cellspacing="0" width="100%">
      <tr valign="top">
        <td align="left"><span class="table-header">Instance Methods</span></td>
        <td align="right" valign="top"
         ><span class="options">[<a href="#section-InstanceMethods"
         class="privatelink" onclick="toggle_private();"
         >hide private</a>]</span></td>
      </tr>
    </table>
  </td>
</tr>
<tr>
    <td width="15%" align="right" valign="top" class="summary">
      <span class="summary-type">&nbsp;</span>
    </td><td class="summary">
      <table width="100%" cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td><span class="summary-sig"><a href="Dingo.pubsub.PublisherClass-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
        <span class="summary-sig-arg">singletonKey</span>)</span><br />
      Construct a Publisher.</td>
          <td align="right" valign="top">
            
            
          </td>
        </tr>
      </table>
      
    </td>
  </tr>
<tr>
    <td width="15%" align="right" valign="top" class="summary">
      <span class="summary-type">&nbsp;</span>
    </td><td class="summary">
      <table width="100%" cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td><span class="summary-sig"><a name="getDeliveryCount"></a><span class="summary-sig-name">getDeliveryCount</span>(<span class="summary-sig-arg">self</span>)</span><br />
      How many listeners have received a message since beginning of 
      run</td>
          <td align="right" valign="top">
            
            
          </td>
        </tr>
      </table>
      
    </td>
  </tr>
<tr>
    <td width="15%" align="right" valign="top" class="summary">
      <span class="summary-type">&nbsp;</span>
    </td><td class="summary">
      <table width="100%" cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td><span class="summary-sig"><a name="getMessageCount"></a><span class="summary-sig-name">getMessageCount</span>(<span class="summary-sig-arg">self</span>)</span><br />
      How many times sendMessage() was called since beginning of run</td>
          <td align="right" valign="top">
            
            
          </td>
        </tr>
      </table>
      
    </td>
  </tr>
<tr>
    <td width="15%" align="right" valign="top" class="summary">
      <span class="summary-type">&nbsp;</span>
    </td><td class="summary">
      <table width="100%" cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td><span class="summary-sig"><a href="Dingo.pubsub.PublisherClass-class.html#subscribe" class="summary-sig-name">subscribe</a>(<span class="summary-sig-arg">self</span>,
        <span class="summary-sig-arg">listener</span>,
        <span class="summary-sig-arg">topic</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>)</span><br />
      Subscribe listener for given topic.</td>
          <td align="right" valign="top">
            
            
          </td>
        </tr>
      </table>
      
    </td>
  </tr>
<tr>
    <td width="15%" align="right" valign="top" class="summary">
      <span class="summary-type">&nbsp;</span>
    </td><td class="summary">
      <table width="100%" cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td><span class="summary-sig"><a href="Dingo.pubsub.PublisherClass-class.html#isSubscribed" class="summary-sig-name">isSubscribed</a>(<span class="summary-sig-arg">self</span>,
        <span class="summary-sig-arg">listener</span>,
        <span class="summary-sig-arg">topic</span>=<span class="summary-sig-default">None</span>)</span><br />
      Return true if listener has subscribed to topic specified.</td>
          <td align="right" valign="top">
            
            
          </td>
        </tr>
      </table>
      
    </td>
  </tr>
<tr>
    <td width="15%" align="right" valign="top" class="summary">
      <span class="summary-type">&nbsp;</span>
    </td><td class="summary">
      <table width="100%" cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td><span class="summary-sig"><a name="validate"></a><span class="summary-sig-name">validate</span>(<span class="summary-sig-arg">self</span>,
        <span class="summary-sig-arg">listener</span>)</span><br />
      Similar to isValid(), but raises a TypeError exception if not 
      valid</td>
          <td align="right" valign="top">
            
            
          </td>
        </tr>
      </table>
      
    </td>
  </tr>
<tr>
    <td width="15%" align="right" valign="top" class="summary">
      <span class="summary-type">&nbsp;</span>
    </td><td class="summary">
      <table width="100%" cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td><span class="summary-sig"><a name="isValid"></a><span class="summary-sig-name">isValid</span>(<span class="summary-sig-arg">self</span>,
        <span class="summary-sig-arg">listener</span>)</span><br />
      Return true only if listener will be able to subscribe to 
      Publisher.</td>
          <td align="right" valign="top">
            
            
          </td>
        </tr>
      </table>
      
    </td>
  </tr>
<tr>
    <td width="15%" align="right" valign="top" class="summary">
      <span class="summary-type">&nbsp;</span>
    </td><td class="summary">
      <table width="100%" cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td><span class="summary-sig"><a href="Dingo.pubsub.PublisherClass-class.html#unsubAll" class="summary-sig-name">unsubAll</a>(<span class="summary-sig-arg">self</span>,
        <span class="summary-sig-arg">topics</span>=<span class="summary-sig-default">None</span>,
        <span class="summary-sig-arg">onNoSuchTopic</span>=<span class="summary-sig-default">None</span>)</span><br />
      Unsubscribe all listeners subscribed for topics.</td>
          <td align="right" valign="top">
            
            
          </td>
        </tr>
      </table>
      
    </td>
  </tr>
<tr>
    <td width="15%" align="right" valign="top" class="summary">
      <span class="summary-type">&nbsp;</span>
    </td><td class="summary">
      <table width="100%" cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td><span class="summary-sig"><a href="Dingo.pubsub.PublisherClass-class.html#unsubscribe" class="summary-sig-name">unsubscribe</a>(<span class="summary-sig-arg">self</span>,
        <span class="summary-sig-arg">listener</span>,
        <span class="summary-sig-arg">topics</span>=<span class="summary-sig-default">None</span>)</span><br />
      Unsubscribe listener.</td>
          <td align="right" valign="top">
            
            
          </td>
        </tr>
      </table>
      
    </td>
  </tr>
<tr>
    <td width="15%" align="right" valign="top" class="summary">
      <span class="summary-type">&nbsp;</span>
    </td><td class="summary">
      <table width="100%" cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td><span class="summary-sig"><a href="Dingo.pubsub.PublisherClass-class.html#getAssociatedTopics" class="summary-sig-name">getAssociatedTopics</a>(<span class="summary-sig-arg">self</span>,
        <span class="summary-sig-arg">listener</span>)</span><br />
      Return a list of topics the given listener is registered with.</td>
          <td align="right" valign="top">
            
            
          </td>
        </tr>
      </table>
      
    </td>
  </tr>
<tr>
    <td width="15%" align="right" valign="top" class="summary">
      <span class="summary-type">&nbsp;</span>
    </td><td class="summary">
      <table width="100%" cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td><span class="summary-sig"><a href="Dingo.pubsub.PublisherClass-class.html#sendMessage" class="summary-sig-name">sendMessage</a>(<span class="summary-sig-arg">self</span>,
        <span class="summary-sig-arg">topic</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
        <span class="summary-sig-arg">data</span>=<span class="summary-sig-default">None</span>,
        <span class="summary-sig-arg">onTopicNeverCreated</span>=<span class="summary-sig-default">None</span>)</span><br />
      Send a message for given topic, with optional data, to subscribed 
      listeners.</td>
          <td align="right" valign="top">
            
            
          </td>
        </tr>
      </table>
      
    </td>
  </tr>
<tr>
    <td width="15%" align="right" valign="top" class="summary">
      <span class="summary-type">&nbsp;</span>
    </td><td class="summary">
      <table width="100%" cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td><span class="summary-sig"><a name="__call__"></a><span class="summary-sig-name">__call__</span>(<span class="summary-sig-arg">self</span>)</span><br />
      Allows for singleton</td>
          <td align="right" valign="top">
            
            
          </td>
        </tr>
      </table>
      
    </td>
  </tr>
<tr>
    <td width="15%" align="right" valign="top" class="summary">
      <span class="summary-type">&nbsp;</span>
    </td><td class="summary">
      <table width="100%" cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td><span class="summary-sig"><a name="__str__"></a><span class="summary-sig-name">__str__</span>(<span class="summary-sig-arg">self</span>)</span></td>
          <td align="right" valign="top">
            
            
          </td>
        </tr>
      </table>
      
    </td>
  </tr>
</table>
<!-- ==================== CLASS VARIABLES ==================== -->
<a name="section-ClassVariables"></a>
<table class="summary" border="1" cellpadding="3"
       cellspacing="0" width="100%" bgcolor="white">
<tr bgcolor="#70b0f0" class="table-header">
  <td colspan="2" class="table-header">
    <table border="0" cellpadding="0" cellspacing="0" width="100%">
      <tr valign="top">
        <td align="left"><span class="table-header">Class Variables</span></td>
        <td align="right" valign="top"
         ><span class="options">[<a href="#section-ClassVariables"
         class="privatelink" onclick="toggle_private();"
         >hide private</a>]</span></td>
      </tr>
    </table>
  </td>
</tr>
<tr class="private">
    <td width="15%" align="right" valign="top" class="summary">
      <span class="summary-type">&nbsp;</span>
    </td><td class="summary">
        <a name="__ALL_TOPICS_TPL"></a><span class="summary-name">__ALL_TOPICS_TPL</span> = <code title="('')"><code class="variable-group">(</code><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code><code class="variable-group">)</code></code>
    </td>
  </tr>
</table>
<!-- ==================== METHOD DETAILS ==================== -->
<a name="section-MethodDetails"></a>
<table class="details" border="1" cellpadding="3"
       cellspacing="0" width="100%" bgcolor="white">
<tr bgcolor="#70b0f0" class="table-header">
  <td colspan="2" class="table-header">
    <table border="0" cellpadding="0" cellspacing="0" width="100%">
      <tr valign="top">
        <td align="left"><span class="table-header">Method Details</span></td>
        <td align="right" valign="top"
         ><span class="options">[<a href="#section-MethodDetails"
         class="privatelink" onclick="toggle_private();"
         >hide private</a>]</span></td>
      </tr>
    </table>
  </td>
</tr>
</table>
<a name="__init__"></a>
<div>
<table class="details" border="1" cellpadding="3"
       cellspacing="0" width="100%" bgcolor="white">
<tr><td>
  <table width="100%" cellpadding="0" cellspacing="0" border="0">
  <tr valign="top"><td>
  <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
        <span class="sig-arg">singletonKey</span>)</span>
    <br /><em class="fname">(Constructor)</em>
  </h3>
  </td><td align="right" valign="top"
    >&nbsp;
    </td>
  </table>
  
  Construct a Publisher. This can only be done by the pubsub module. You
  just use pubsub.Publisher().
  <dl class="fields">
  </dl>
</td></tr></table>
</div>
<a name="subscribe"></a>
<div>
<table class="details" border="1" cellpadding="3"
       cellspacing="0" width="100%" bgcolor="white">
<tr><td>
  <table width="100%" cellpadding="0" cellspacing="0" border="0">
  <tr valign="top"><td>
  <h3 class="epydoc"><span class="sig"><span class="sig-name">subscribe</span>(<span class="sig-arg">self</span>,
        <span class="sig-arg">listener</span>,
        <span class="sig-arg">topic</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>)</span>
  </h3>
  </td><td align="right" valign="top"
    >&nbsp;
    </td>
  </table>
  
  <pre class="literalblock">

Subscribe listener for given topic. If topic is not specified,
listener will be subscribed for all topics (that listener will 
receive a Message for any topic for which a message is generated). 

This method may be called multiple times for one listener,
registering it with many topics.  It can also be invoked many
times for a particular topic, each time with a different
listener.  See the class doc for requirements on listener and
topic.

:note: The listener is held by Publisher() only by *weak*
       reference.  This means you must ensure you have at
       least one strong reference to listener, otherwise it
       will be DOA (&quot;dead on arrival&quot;). This is particularly
       easy to forget when wrapping a listener method in a
       proxy object (e.g. to bind some of its parameters),
       e.g.::

          class Foo: 
              def listener(self, event): pass
          class Wrapper:
              def __init__(self, fun): self.fun = fun
              def __call__(self, *args): self.fun(*args)
          foo = Foo()
          Publisher().subscribe( Wrapper(foo.listener) ) # whoops: DOA!
          wrapper = Wrapper(foo.listener)
          Publisher().subscribe(wrapper) # good!

:note: Calling this method for the same listener, with two
       topics in the same branch of the topic hierarchy, will
       cause the listener to be notified twice when a message
       for the deepest topic is sent. E.g.
       subscribe(listener, 't1') and then subscribe(listener,
       ('t1','t2')) means that when calling sendMessage('t1'),
       listener gets one message, but when calling
       sendMessage(('t1','t2')), listener gets message twice.

</pre>
  <dl class="fields">
  </dl>
</td></tr></table>
</div>
<a name="isSubscribed"></a>
<div>
<table class="details" border="1" cellpadding="3"
       cellspacing="0" width="100%" bgcolor="white">
<tr><td>
  <table width="100%" cellpadding="0" cellspacing="0" border="0">
  <tr valign="top"><td>
  <h3 class="epydoc"><span class="sig"><span class="sig-name">isSubscribed</span>(<span class="sig-arg">self</span>,
        <span class="sig-arg">listener</span>,
        <span class="sig-arg">topic</span>=<span class="sig-default">None</span>)</span>
  </h3>
  </td><td align="right" valign="top"
    >&nbsp;
    </td>
  </table>
  
  Return true if listener has subscribed to topic specified. If no topic
  specified, return true if subscribed to something. Use 
  topic=getStrAllTopics() to determine if a listener will receive messages 
  for all topics.
  <dl class="fields">
  </dl>
</td></tr></table>
</div>
<a name="unsubAll"></a>
<div>
<table class="details" border="1" cellpadding="3"
       cellspacing="0" width="100%" bgcolor="white">
<tr><td>
  <table width="100%" cellpadding="0" cellspacing="0" border="0">
  <tr valign="top"><td>
  <h3 class="epydoc"><span class="sig"><span class="sig-name">unsubAll</span>(<span class="sig-arg">self</span>,
        <span class="sig-arg">topics</span>=<span class="sig-default">None</span>,
        <span class="sig-arg">onNoSuchTopic</span>=<span class="sig-default">None</span>)</span>
  </h3>
  </td><td align="right" valign="top"
    >&nbsp;
    </td>
  </table>
  
  Unsubscribe all listeners subscribed for topics. Topics can be a 
  single topic (string or tuple) or a list of topics (ie list containing 
  strings and/or tuples). If topics is not specified, all listeners for all
  topics will be unsubscribed, ie. the Publisher singleton will have no 
  topics and no listeners left. If onNoSuchTopic is given, it will be 
  called as onNoSuchTopic(topic) for each topic that is unknown.
  <dl class="fields">
  </dl>
</td></tr></table>
</div>
<a name="unsubscribe"></a>
<div>
<table class="details" border="1" cellpadding="3"
       cellspacing="0" width="100%" bgcolor="white">
<tr><td>
  <table width="100%" cellpadding="0" cellspacing="0" border="0">
  <tr valign="top"><td>
  <h3 class="epydoc"><span class="sig"><span class="sig-name">unsubscribe</span>(<span class="sig-arg">self</span>,
        <span class="sig-arg">listener</span>,
        <span class="sig-arg">topics</span>=<span class="sig-default">None</span>)</span>
  </h3>
  </td><td align="right" valign="top"
    >&nbsp;
    </td>
  </table>
  
  <p>Unsubscribe listener. If topics not specified, listener is completely 
  unsubscribed. Otherwise, it is unsubscribed only for the topic (the usual
  tuple) or list of topics (ie a list of tuples) specified. Nothing happens
  if listener is not actually subscribed to any of the topics.</p>
  Note that if listener subscribed for two topics (a,b) and (a,c), then 
  unsubscribing for topic (a) will do nothing. You must use 
  getAssociatedTopics(listener) and give unsubscribe() the returned list 
  (or a subset thereof).
  <dl class="fields">
  </dl>
</td></tr></table>
</div>
<a name="getAssociatedTopics"></a>
<div>
<table class="details" border="1" cellpadding="3"
       cellspacing="0" width="100%" bgcolor="white">
<tr><td>
  <table width="100%" cellpadding="0" cellspacing="0" border="0">
  <tr valign="top"><td>
  <h3 class="epydoc"><span class="sig"><span class="sig-name">getAssociatedTopics</span>(<span class="sig-arg">self</span>,
        <span class="sig-arg">listener</span>)</span>
  </h3>
  </td><td align="right" valign="top"
    >&nbsp;
    </td>
  </table>
  
  <pre class="literalblock">
Return a list of topics the given listener is registered with. 
Returns [] if listener never subscribed.

:attention: when using the return of this method to compare to
        expected list of topics, remember that topics that are
        not in the form of a tuple appear as a one-tuple in
        the return. E.g. if you have subscribed a listener to
        'topic1' and ('topic2','subtopic2'), this method
        returns::
    
        associatedTopics = [('topic1',), ('topic2','subtopic2')]

</pre>
  <dl class="fields">
  </dl>
</td></tr></table>
</div>
<a name="sendMessage"></a>
<div>
<table class="details" border="1" cellpadding="3"
       cellspacing="0" width="100%" bgcolor="white">
<tr><td>
  <table width="100%" cellpadding="0" cellspacing="0" border="0">
  <tr valign="top"><td>
  <h3 class="epydoc"><span class="sig"><span class="sig-name">sendMessage</span>(<span class="sig-arg">self</span>,
        <span class="sig-arg">topic</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
        <span class="sig-arg">data</span>=<span class="sig-default">None</span>,
        <span class="sig-arg">onTopicNeverCreated</span>=<span class="sig-default">None</span>)</span>
  </h3>
  </td><td align="right" valign="top"
    >&nbsp;
    </td>
  </table>
  
  Send a message for given topic, with optional data, to subscribed 
  listeners. If topic is not specified, only the listeners that are 
  interested in all topics will receive message. The onTopicNeverCreated is
  an optional callback of your choice that will be called if the topic 
  given was never created (i.e. it, or one of its subtopics, was never 
  subscribed to by any listener). It will be called as 
  onTopicNeverCreated(topic).
  <dl class="fields">
  </dl>
</td></tr></table>
</div>
<br />
<!-- ==================== NAVIGATION BAR ==================== -->
<table class="navbar" border="0" width="100%" cellpadding="0"
       bgcolor="#a0c0ff" cellspacing="0">
  <tr valign="middle">
  <!-- Home link -->
      <th>&nbsp;&nbsp;&nbsp;<a
        href="Dingo-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>

  <!-- Tree link -->
      <th>&nbsp;&nbsp;&nbsp;<a
        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>

  <!-- Index link -->
      <th>&nbsp;&nbsp;&nbsp;<a
        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>

  <!-- Help link -->
      <th>&nbsp;&nbsp;&nbsp;<a
        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>

  <!-- Project homepage -->
      <th class="navbar" align="right" width="100%">
        <table border="0" cellpadding="0" cellspacing="0">
          <tr><th class="navbar" align="center"
            ><a class="navbar" target="_top" href="http://code.google.com/p/dingo-wsn/">Dingo</a></th>
          </tr></table></th>
  </tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%%">
  <tr>
    <td align="left" class="footer">
    <a href="epydoc-log.html">Generated by Epydoc
    3.0beta1 on Tue Jun  3 00:42:56 2008</a>
    </td>
    <td align="right" class="footer">
      <a href="http://epydoc.sourceforge.net">http://epydoc.sourceforge.net</a>
    </td>
  </tr>
</table>

<script type="text/javascript">
  <!--
  // Private objects are initially displayed (because if
  // javascript is turned off then we want them to be
  // visible); but by default, we want to hide them.  So hide
  // them unless we have a cookie that says to show them.
  checkCookie()
  // -->
</script>
  
</body>
</html>
